import router, { asyncRoutes } from '@/router'
import store from '@/store'
import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css'
import getPageTitle from '@/utils/get-page-title'

// 白名单 ： 项目里面 不需要token，不需要登录既可以看见的页面  注册页  登录页面  404 等
const whiteList = ['/login']

router.beforeEach(async(to, from, next) => {
  document.title = getPageTitle(to.meta.title)
  NProgress.start()
  const token = store.state.user.token
  // next()
  if (token) {
    // if (to.path === '/login') {
    if (whiteList.includes(to.path)) {
      next('/')
      NProgress.done()
    } else {
      if (!store.state.user.userInfo.id) {
        // 将userInfo的数据放到了vuex里面去了， 随便找请求成功后，对象的一个属性，一般用id
        const res = await store.dispatch('user/getUserInfoAction')
        console.log('用户详细信息接口的返回值： ', res)
        // 添加动态路由规则表的时候，把asyncRoutes全量路由表先根据 服务器的返回值res 过滤一遍
        // 在50个元素里面asyncRoutes筛选 出来 2个元素
        const filterRoutes = asyncRoutes.filter(item => {
          const currentName = item.children[0].name
          return res.includes(currentName)
        })
        console.log('过滤以后的数组：', filterRoutes)
        filterRoutes.push({ path: '*', redirect: '/404', hidden: true })
        router.addRoutes(filterRoutes)
        store.commit('menu/setMenuList', filterRoutes)
        next({
          ...to,
          replace: true // 将重新调整的动态路由的历史，不要加入到历史记录里面
        })
      }
      next()
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  NProgress.done()
})
